Compilers – programs that accept a high-level description of desired systems and produce implementable versions – dominate design automation in software and integrated digital circuits. Neither word processors nor the 3 million transistor microprocessors they run on could be constructed without compilers.
In 1989, I published work describing a mechanical design compiler of a sort. (It accepted schematics and utility functions for, e.g., hydraulic systems, and it returned catalog numbers for optimal implementations. However, it represented only the crudest of geometric information, such as the heights of connecting shafts above a base plate: a better mechanical compiler would deal with complex geometry.) Yet if imitation is the sincerest form of flattery, my work has been little flattered. For example, the journal Artificial Intelligence In Engineering Design, Analysis, and Manufacturing has since published three special issues on machine learning in design (Spring 1994, April 1996, April 1998), but no papers other than mine on compilers.
This chapter will address two questions: Why is it that compilers are so central in software and integrated circuit design and so peripheral in mechanical design? What does the reason tell us about useful directions for further research? These questions, as we will see, have to be answered in abstract form, because no single company or researcher will be able to create a satisfactory design compiler. We need general guidelines to allow convergence in multiple avenues of development.